1.2 Parser:Bridging Tokens and Syntax with Listeners 中文版

1.2 Parser:Bridging Tokens and Syntax with Listeners》中文版初稿。我在尝试英文写作,后续将维护英文版。

parser\parser.dart 是该模块的入口,提供一个 parse 方法,接收一个 Token 实例(Token 链表),执行解析操作。

解析操作由 Parser 类执行。该类也是由一组继承关系构成的,基类是 Parser,继承类有 ClassMemberParser、MiniAstParser、TopLevelParser。

Parser 类最核心的方法是 parseUnit。它内部包含一个循环,会遍历 Token 链表,在循环内部建立了大量的、一层一层的规则,根据 Token 间的相互关系,判断出一些基础语法。

这个过程是不是跟 tokenize 很像?共性是他们采取的模式是一样的,区别在于两者操作的对象一个是字符,一个是 Token,另外两者的规则也是大相径庭。

经过这第二道处理,我们已经能够识别出比如方法开始、方法体开始这样的 Dart 语法了。Parser 中有一个 Listener 类型的属性,Parser 每遇到一个语法,都会调用 Listener 中的对应方法,起到对外通知的作用。Listener 定义了大量的方法(每个 Dart 语法事件,都有一个方法对应)。

Listener 类连接是 Parser 与后续流程的关键。接下来该干啥?该构建抽象语法树AST)了,这一步由 Dart 的 Fasta 解析器进行。尽管 Fasta 实现很复杂,但归根结底,他是基于 Listener 派生出来的,由 Listener 中大量事件来驱动。


本文作者:Maeiee

本文链接:1.2 Parser:Bridging Tokens and Syntax with Listeners 中文版

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!